package iooperator;

import java.io.*;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.util.Iterator;
import java.util.Set;

/**
 * @Filename: NioOperation
 * @Author: czh
 * @Data:2023/7/4 16:37
 * NNIO 操作
 */
public class NioOperation {
    public static void main(String[] args) {
//        copyFileByNIO();
    }

    /**
     * NIO 快速复制文件
     */
    public static void copyFileByNIO() {
        String file = "D:\\workspace\\java\\src\\iooperator\\文件.docx";
        String fileNio = "D:\\workspace\\java\\src\\iooperator\\文件NIO.docx";
        try {
            // 获取输入字节流
            FileInputStream fileInputStream = new FileInputStream(file);
            // 获取输入流字节的文件通道
            FileChannel inputChannel = fileInputStream.getChannel();
            // 获取输出字节流
            FileOutputStream fileOutputStream = new FileOutputStream(fileNio);
            // 获取输出字节流的文件通道
            FileChannel outputChannel = fileOutputStream.getChannel();

            // 添加缓存去并设置最大容量为1024
            ByteBuffer buffer = ByteBuffer.allocate(1024);

            while (true) {
                // 从输入通道读取数据到缓存区
                int read = inputChannel.read(buffer);
                // 如果read==-1表示结束
                if (read == -1) {
                    break;
                }
                // 切换读写
                buffer.flip();
                //把缓存的文件写入输出文件
                outputChannel.write(buffer);
                // 清空缓存区
                buffer.clear();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 非阻塞NIO文件读取
     */
    // 存在客户端和服务端
    // NioNonBlockClient
    //NioNonBlockServer

}
